package org.browsermob.proxy.guice; import com.google.inject.Binder; import com.google.inject.Key; import com.google.inject.Module; import cz.mallat.uasparser.OnlineUpdateUASparser; import joptsimple.ArgumentAcceptingOptionSpec; import joptsimple.OptionParser; import joptsimple.OptionSet; import org.browsermob.proxy.http.BrowserMobHttpClient; import java.io.IOException; import static java.util.Arrays.asList; public class ConfigModule implements Module { private String[] args; public ConfigModule(String[] args) { this.args = args; } @Override public void configure(Binder binder) { OptionParser parser = new OptionParser(); ArgumentAcceptingOptionSpec<Integer> portSpec = parser.accepts("port", "The port to listen on") .withOptionalArg().ofType(Integer.class).defaultsTo(8080); ArgumentAcceptingOptionSpec<Integer> userAgentCacheSpec = parser.accepts("uaCache", "The number of days to cache a database of User-Agent records from http://user-agent-string.info") .withOptionalArg().ofType(Integer.class).defaultsTo(1); parser.acceptsAll(asList("help", "?"), "This help text"); OptionSet options = parser.parse(args); if (options.has("?")) { try { parser.printHelpOn(System.out); System.exit(0); } catch (IOException e) { // should never happen, but... e.printStackTrace(); } return; } binder.bind(Key.get(Integer.class, new NamedImpl("port"))).toInstance(portSpec.value(options)); Integer userAgentCacheDays = userAgentCacheSpec.value(options); if (BrowserMobHttpClient.PARSER instanceof OnlineUpdateUASparser) { ((OnlineUpdateUASparser) BrowserMobHttpClient.PARSER).setUpdateInterval(1000 * 60 * 60 * 24 * userAgentCacheDays); } } }